package com.elai.tags.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.elai.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.elai.tags.mapper.BaseTagsTypeMapper;
import com.elai.tags.domain.BaseTagsTypeDO;
import com.elai.tags.service.BaseTagsTypeService;

/**
 * 标签类型Service业务层处理
 *
 * @author elai
 * @date 2021-06-27
 */
@Service
public class BaseTagsTypeServiceImpl implements BaseTagsTypeService
{
    @Autowired
    private BaseTagsTypeMapper baseTagsTypeMapper;

    /**
     * 查询标签类型
     *
     * @param id 标签类型ID
     * @return 标签类型
     */
    @Override
    public BaseTagsTypeDO selectBaseTagsTypeById(Long id)
    {
        return baseTagsTypeMapper.selectBaseTagsTypeById(id);
    }

    /**
     * 查询标签类型列表
     *
     * @param baseTagsType 标签类型
     * @return 标签类型
     */
    @Override
    public List<BaseTagsTypeDO> selectBaseTagsTypeList(BaseTagsTypeDO baseTagsType)
    {
        return baseTagsTypeMapper.selectBaseTagsTypeList(baseTagsType);
    }

    /**
     * 新增标签类型
     *
     * @param baseTagsType 标签类型
     * @return 结果
     */
    @Override
    public int insertBaseTagsType(BaseTagsTypeDO baseTagsType)
    {
        baseTagsType.setCreateTime(DateUtils.getNowDate());
    baseTagsType.setUpdateTime(DateUtils.getNowDate());
        return baseTagsTypeMapper.insertBaseTagsType(baseTagsType);
    }

    /**
     * 修改标签类型
     *
     * @param baseTagsType 标签类型
     * @return 结果
     */
    @Override
    public int updateBaseTagsType(BaseTagsTypeDO baseTagsType)
    {
        baseTagsType.setUpdateTime(DateUtils.getNowDate());
        return baseTagsTypeMapper.updateBaseTagsType(baseTagsType);
    }

    /**
     * 批量删除标签类型
     *
     * @param ids 需要删除的标签类型ID
     * @return 结果
     */
    @Override
    public int deleteBaseTagsTypeByIds(Long[] ids)
    {
        return baseTagsTypeMapper.deleteBaseTagsTypeByIds(ids);
    }

    /**
     * 删除标签类型信息
     *
     * @param id 标签类型ID
     * @return 结果
     */
    @Override
    public int deleteBaseTagsTypeById(Long id)
    {
        return baseTagsTypeMapper.deleteBaseTagsTypeById(id);
    }

    @Override
    public Map<String,Object> selectBaseTagsTypeTreeData() {
        Map param=new HashMap();
        param.put("id",0L);
        param.put("type","type");
        param.put("label","标签");
        Map<String,Object> result=getBaseTagsTypeDOS(param);

        return result;
    }

    private Map<String,Object> getBaseTagsTypeDOS(Map<String,Object> map) {
        BaseTagsTypeDO param=new BaseTagsTypeDO();
        param.setParentId(Long.valueOf(map.get("id")+""));
        List<BaseTagsTypeDO> childs= baseTagsTypeMapper.selectBaseTagsTypeList(param);
        if(childs.size()>0){
            List<Map<String,Object>> childList=new ArrayList<>();
            childs.stream().forEach(c->{
                Map<String,Object> child=new HashMap<>();
                child.put("id",c.getId());
                child.put("type","type");
                child.put("label",c.getTypeName());
                getBaseTagsTypeDOS(child);
                childList.add(child);
            });
            map.put("children",childList);
        }

        return map;
    }
}
